home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / tex / texttest.zip / DICT.C < prev    next >
C/C++ Source or Header  |  1994-06-21  |  3KB  |  129 lines

  1. /***********************************************************************/
  2. /* Power-Pipe:  This is a Pipe-Filter similar like  SORT / FIND / MORE */
  3. /***********************************************************************/
  4. /*type info.doc|dict >info.dct       ;Sort A...Z and kill worddublettes*/
  5. /*type info.doc|dict /R >info.dct    ;Sort Z...A and kill worddublettes*/
  6. /*type info.doc|dict ! ! >info.txt   ;Extract raw Text for WindowsWrite*/
  7. /* DICT is very usefull if you want extract Dictionarys from Textfiles */
  8.  
  9.  
  10. #include <string.h>
  11. #include <stdio.h>
  12. #include <alloc.h>
  13.  
  14.  
  15. char Puffer[80];
  16. char  April[80];
  17. char  Ktipa[80];
  18. int ASCIItable[256];
  19. char huge *Zeiger;
  20. char huge *Zeiger2;
  21. char huge *ZeigerK;
  22. char huge *ZeigerS;
  23. unsigned long Frei;
  24. unsigned long gross,z,y;
  25. int a,b,t,i,l;
  26. int stp;
  27.  
  28.  
  29.  
  30.  
  31. int isnotletter(int c)
  32. {
  33.  if((c>='a')&&(c<='z')) return 0;
  34.  if((c>='A')&&(c<='Z')) return 0;
  35.  if(c==39) return 0;
  36.  if(c=='ß')return 0;
  37.  if((c>=128)&&(c<=165)) return 0;
  38.  return 1;
  39. }
  40.  
  41.  
  42.  
  43. int main(int argc)
  44. {
  45. Frei=farcoreleft()-5000;
  46. Zeiger2= (char huge *) farmalloc(Frei);
  47. Zeiger=Zeiger2;
  48. Frei=Frei-2;
  49.  
  50. for(t=0;t<256;t++)ASCIItable[t]=t;
  51. ASCIItable['A']=1;
  52. ASCIItable['a']=1;
  53. ASCIItable['Ä']=2;
  54. ASCIItable['ä']=2;
  55. ASCIItable['Ö']=17;
  56. ASCIItable['ö']=17;
  57. ASCIItable['Ü']=24;
  58. ASCIItable['ü']=24;
  59. ASCIItable['ß']=30;
  60. for(t='B';t<='O';t++)ASCIItable[t]=t-63;
  61. for(t='P';t<='U';t++)ASCIItable[t]=t-62;
  62. for(t='V';t<='Z';t++)ASCIItable[t]=t-61;
  63. for(t='b';t<='o';t++)ASCIItable[t]=t-95;
  64. for(t='p';t<='u';t++)ASCIItable[t]=t-94;
  65. for(t='v';t<='z';t++)ASCIItable[t]=t-93;
  66. l=2*argc-3;
  67. if(l>1)l=-1;
  68.  
  69. a=0;
  70. for(gross=0;gross<Frei;gross++)
  71.   {
  72.    stp=fgetc(stdin);
  73.    if(stp<0) break;
  74.    i=isnotletter(stp);
  75.    if(!i)a=0;
  76.    if(i&a) {a=0; while(isnotletter(stp)){stp=fgetc(stdin); if(stp<0)break;} }
  77.    if(stp<0) break;
  78.    if(isnotletter(stp)) stp=0,a=1;
  79.    *(Zeiger)=(char)stp;
  80.    Zeiger=Zeiger+1;
  81.   }
  82. if(gross==Frei)return 1;
  83. *(Zeiger)=0;
  84. gross++;
  85. Ktipa[1]=1;
  86. Ktipa[0]=0;
  87. April[0]=0;
  88.  
  89. loop:
  90. Zeiger=Zeiger2;
  91. ZeigerS=Zeiger;
  92. ZeigerK=Zeiger;
  93. a=0,y=0,i=0;
  94. if(l<0)i=255;
  95. for(t=0;t<79;t++)April[t]=i;
  96. April[79]=0;
  97. for(z=0;z<gross;z++)
  98.    {
  99.     b=*(Zeiger);
  100.     Zeiger=Zeiger+1;
  101.     if((a|b)==0)continue;
  102.     Puffer[a]=b;
  103.     a++;
  104.     if(a>77) {t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++;  continue;}
  105.     if(a==1) ZeigerS=Zeiger-1;
  106.     if(b==0)
  107.             {
  108.              for(i=0;i<a;i++) if(ASCIItable[Puffer[i]]!=ASCIItable[Ktipa[i]])break;
  109.              if(i==a){t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++;  continue;}
  110.              for(i=0;i<a;i++)if((t=ASCIItable[Puffer[i]]-ASCIItable[April[i]])!=0)break;
  111.              if(t*l>0) { y++; ZeigerK=ZeigerS; strcpy(April,Puffer); }
  112.              if (argc>2) break;
  113.              a=0;
  114.             }
  115.    }
  116. if(y>0)
  117.        {
  118.         t=0;
  119.         while(*(ZeigerK+t)!=0)*(ZeigerK+t)=0,t++;
  120.         t=fputs(April,stdout);  if(t<0) return 2;
  121.         if(argc>2) t=fputs(" ",stdout);
  122.         if(argc<=2) { strcpy(Ktipa,April); t=fputs("\n",stdout); }
  123.         if(t<0) return 2;
  124.        }
  125. if(y>0) goto loop;
  126.  
  127. farfree(Zeiger2);
  128. return 0;
  129. }